package lecode;

import java.util.ArrayList;
import java.util.List;

public class 数字分组求偶数和 {


    public static void main(String[] args) {
        // You can add more test cases here
        System.out.println(solution(new int[]{123, 456, 789}) == 14);
        System.out.println(solution(new int[]{123456789}) == 4);
        System.out.println(solution(new int[]{14329, 7568}) == 10);
    }

    /**
     * 偶数+偶数=偶数
     * 奇数+奇数=奇数
     * 偶数+奇数=奇数
     */
    public static int solution(int[] numbers) {
        // 每一行取出一个元素相加 第一行第一个元素+第二行第一个元素+第三行第一个元素，第一行第一个元素+第二行第一个元素+第三行第二个元素，以此类推
        int count = 0;
        List<List<Integer>> lists = convertTo2DList(numbers);
        return recursiveForLoopsByList(0, lists.get(0),0, numbers.length -1, count, lists);
    }


    /**
     * 递归处理list
     * @param start          开始的层数
     * @param currentIndices 当前层的数据
     * @param baseValue      上一层的和
     * @param end           结束层级
     * @param count           统计的次数
     * @param ints           原始数据
     */
    public static int recursiveForLoopsByList(int start, List<Integer> currentIndices, int baseValue, int end, int count, List<List<Integer>> ints) {
        if (start == end) {
            for (int currentIndex : currentIndices) {
                int tage = baseValue + currentIndex;
                if (tage % 2 == 0) {
                    count++;
                }
            }
            return count;
        }
        if (start < end) {
            for (int currentIndex : currentIndices) {
                int tage = baseValue + currentIndex;
                count = recursiveForLoopsByList(start + 1, ints.get(start + 1), tage, end, count, ints);
            }
        }
        return count;
    }


    public static List<List<Integer>> convertTo2DList(int[] numbers) {
        List<List<Integer>> result = new ArrayList<>();
        for (int number : numbers) {
            result.add(convertNumberToList(number));
        }
        return result;
    }


    public static List<Integer> convertNumberToList(int number) {
        // 将数字转换为字符串，以便逐个提取每一位
        String numStr = String.valueOf(number);
        List<Integer> result = new ArrayList<>();
        for (char c : numStr.toCharArray()) {
            // 将每一位转换为整数并赋值到结果数组中
            result.add(Character.getNumericValue(c));
        }
        return result;
    }
}
